#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# @Time : 2021/4/12 16:51
# @File : 谁养鱼问题.py
# @Author:

# -*- coding: utf-8 -*-
# 尝试使用NumPy来创建数组，结果耗时78秒才做完，不用的话用时49秒
import time

LHom = ["黄蓝红绿白", "黄蓝红白绿", "黄蓝绿红白", "黄蓝绿白红", "黄蓝白红绿", "黄蓝白绿红", "黄红蓝绿白", "黄红蓝白绿", "黄红绿蓝白", "黄红绿白蓝", "黄红白蓝绿", "黄红白绿蓝",
        "黄绿蓝红白", "黄绿蓝白红", "黄绿红蓝白", "黄绿红白蓝", "黄绿白蓝红", "黄绿白红蓝", "黄白蓝红绿", "黄白蓝绿红", "黄白红蓝绿", "黄白红绿蓝", "黄白绿蓝红", "黄白绿红蓝",
        "蓝黄红绿白", "蓝黄红白绿", "蓝黄绿红白", "蓝黄绿白红", "蓝黄白红绿", "蓝黄白绿红", "蓝红黄绿白", "蓝红黄白绿", "蓝红绿黄白", "蓝红绿白黄", "蓝红白黄绿", "蓝红白绿黄",
        "蓝绿黄红白", "蓝绿黄白红", "蓝绿红黄白", "蓝绿红白黄", "蓝绿白黄红", "蓝绿白红黄", "蓝白黄红绿", "蓝白黄绿红", "蓝白红黄绿", "蓝白红绿黄", "蓝白绿黄红", "蓝白绿红黄",
        "红黄蓝绿白", "红黄蓝白绿", "红黄绿蓝白", "红黄绿白蓝", "红黄白蓝绿", "红黄白绿蓝", "红蓝黄绿白", "红蓝黄白绿", "红蓝绿黄白", "红蓝绿白黄", "红蓝白黄绿", "红蓝白绿黄",
        "红绿黄蓝白", "红绿黄白蓝", "红绿蓝黄白", "红绿蓝白黄", "红绿白黄蓝", "红绿白蓝黄", "红白黄蓝绿", "红白黄绿蓝", "红白蓝黄绿", "红白蓝绿黄", "红白绿黄蓝", "红白绿蓝黄",
        "绿黄蓝红白", "绿黄蓝白红", "绿黄红蓝白", "绿黄红白蓝", "绿黄白蓝红", "绿黄白红蓝", "绿蓝黄红白", "绿蓝黄白红", "绿蓝红黄白", "绿蓝红白黄", "绿蓝白黄红", "绿蓝白红黄",
        "绿红黄蓝白", "绿红黄白蓝", "绿红蓝黄白", "绿红蓝白黄", "绿红白黄蓝", "绿红白蓝黄", "绿白黄蓝红", "绿白黄红蓝", "绿白蓝黄红", "绿白蓝红黄", "绿白红黄蓝", "绿白红蓝黄",
        "白黄蓝红绿", "白黄蓝绿红", "白黄红蓝绿", "白黄红绿蓝", "白黄绿蓝红", "白黄绿红蓝", "白蓝黄红绿", "白蓝黄绿红", "白蓝红黄绿", "白蓝红绿黄", "白蓝绿黄红", "白蓝绿红黄",
        "白红黄蓝绿", "白红黄绿蓝", "白红蓝黄绿", "白红蓝绿黄", "白红绿黄蓝", "白红绿蓝黄", "白绿黄蓝红", "白绿黄红蓝", "白绿蓝黄红", "白绿蓝红黄", "白绿红黄蓝", "白绿红蓝黄"]
LCou = ["挪丹英德瑞", "挪丹英瑞德", "挪丹德英瑞", "挪丹德瑞英", "挪丹瑞英德", "挪丹瑞德英", "挪英丹德瑞", "挪英丹瑞德", "挪英德丹瑞", "挪英德瑞丹", "挪英瑞丹德", "挪英瑞德丹",
        "挪德丹英瑞", "挪德丹瑞英", "挪德英丹瑞", "挪德英瑞丹", "挪德瑞丹英", "挪德瑞英丹", "挪瑞丹英德", "挪瑞丹德英", "挪瑞英丹德", "挪瑞英德丹", "挪瑞德丹英", "挪瑞德英丹",
        "丹挪英德瑞", "丹挪英瑞德", "丹挪德英瑞", "丹挪德瑞英", "丹挪瑞英德", "丹挪瑞德英", "丹英挪德瑞", "丹英挪瑞德", "丹英德挪瑞", "丹英德瑞挪", "丹英瑞挪德", "丹英瑞德挪",
        "丹德挪英瑞", "丹德挪瑞英", "丹德英挪瑞", "丹德英瑞挪", "丹德瑞挪英", "丹德瑞英挪", "丹瑞挪英德", "丹瑞挪德英", "丹瑞英挪德", "丹瑞英德挪", "丹瑞德挪英", "丹瑞德英挪",
        "英挪丹德瑞", "英挪丹瑞德", "英挪德丹瑞", "英挪德瑞丹", "英挪瑞丹德", "英挪瑞德丹", "英丹挪德瑞", "英丹挪瑞德", "英丹德挪瑞", "英丹德瑞挪", "英丹瑞挪德", "英丹瑞德挪",
        "英德挪丹瑞", "英德挪瑞丹", "英德丹挪瑞", "英德丹瑞挪", "英德瑞挪丹", "英德瑞丹挪", "英瑞挪丹德", "英瑞挪德丹", "英瑞丹挪德", "英瑞丹德挪", "英瑞德挪丹", "英瑞德丹挪",
        "德挪丹英瑞", "德挪丹瑞英", "德挪英丹瑞", "德挪英瑞丹", "德挪瑞丹英", "德挪瑞英丹", "德丹挪英瑞", "德丹挪瑞英", "德丹英挪瑞", "德丹英瑞挪", "德丹瑞挪英", "德丹瑞英挪",
        "德英挪丹瑞", "德英挪瑞丹", "德英丹挪瑞", "德英丹瑞挪", "德英瑞挪丹", "德英瑞丹挪", "德瑞挪丹英", "德瑞挪英丹", "德瑞丹挪英", "德瑞丹英挪", "德瑞英挪丹", "德瑞英丹挪",
        "瑞挪丹英德", "瑞挪丹德英", "瑞挪英丹德", "瑞挪英德丹", "瑞挪德丹英", "瑞挪德英丹", "瑞丹挪英德", "瑞丹挪德英", "瑞丹英挪德", "瑞丹英德挪", "瑞丹德挪英", "瑞丹德英挪",
        "瑞英挪丹德", "瑞英挪德丹", "瑞英丹挪德", "瑞英丹德挪", "瑞英德挪丹", "瑞英德丹挪", "瑞德挪丹英", "瑞德挪英丹", "瑞德丹挪英", "瑞德丹英挪", "瑞德英挪丹", "瑞德英丹挪"]
LDri = ["茶咖奶酒水", "茶咖奶水酒", "茶咖酒奶水", "茶咖酒水奶", "茶咖水奶酒", "茶咖水酒奶", "茶奶咖酒水", "茶奶咖水酒", "茶奶酒咖水", "茶奶酒水咖", "茶奶水咖酒", "茶奶水酒咖",
        "茶酒咖奶水", "茶酒咖水奶", "茶酒奶咖水", "茶酒奶水咖", "茶酒水咖奶", "茶酒水奶咖", "茶水咖奶酒", "茶水咖酒奶", "茶水奶咖酒", "茶水奶酒咖", "茶水酒咖奶", "茶水酒奶咖",
        "咖茶奶酒水", "咖茶奶水酒", "咖茶酒奶水", "咖茶酒水奶", "咖茶水奶酒", "咖茶水酒奶", "咖奶茶酒水", "咖奶茶水酒", "咖奶酒茶水", "咖奶酒水茶", "咖奶水茶酒", "咖奶水酒茶",
        "咖酒茶奶水", "咖酒茶水奶", "咖酒奶茶水", "咖酒奶水茶", "咖酒水茶奶", "咖酒水奶茶", "咖水茶奶酒", "咖水茶酒奶", "咖水奶茶酒", "咖水奶酒茶", "咖水酒茶奶", "咖水酒奶茶",
        "奶茶咖酒水", "奶茶咖水酒", "奶茶酒咖水", "奶茶酒水咖", "奶茶水咖酒", "奶茶水酒咖", "奶咖茶酒水", "奶咖茶水酒", "奶咖酒茶水", "奶咖酒水茶", "奶咖水茶酒", "奶咖水酒茶",
        "奶酒茶咖水", "奶酒茶水咖", "奶酒咖茶水", "奶酒咖水茶", "奶酒水茶咖", "奶酒水咖茶", "奶水茶咖酒", "奶水茶酒咖", "奶水咖茶酒", "奶水咖酒茶", "奶水酒茶咖", "奶水酒咖茶",
        "酒茶咖奶水", "酒茶咖水奶", "酒茶奶咖水", "酒茶奶水咖", "酒茶水咖奶", "酒茶水奶咖", "酒咖茶奶水", "酒咖茶水奶", "酒咖奶茶水", "酒咖奶水茶", "酒咖水茶奶", "酒咖水奶茶",
        "酒奶茶咖水", "酒奶茶水咖", "酒奶咖茶水", "酒奶咖水茶", "酒奶水茶咖", "酒奶水咖茶", "酒水茶咖奶", "酒水茶奶咖", "酒水咖茶奶", "酒水咖奶茶", "酒水奶茶咖", "酒水奶咖茶",
        "水茶咖奶酒", "水茶咖酒奶", "水茶奶咖酒", "水茶奶酒咖", "水茶酒咖奶", "水茶酒奶咖", "水咖茶奶酒", "水咖茶酒奶", "水咖奶茶酒", "水咖奶酒茶", "水咖酒茶奶", "水咖酒奶茶",
        "水奶茶咖酒", "水奶茶酒咖", "水奶咖茶酒", "水奶咖酒茶", "水奶酒茶咖", "水奶酒咖茶", "水酒茶咖奶", "水酒茶奶咖", "水酒咖茶奶", "水酒咖奶茶", "水酒奶茶咖", "水酒奶咖茶"]
LCig = ["聘地币屁并", "聘地币并屁", "聘地屁币并", "聘地屁并币", "聘地并币屁", "聘地并屁币", "聘币地屁并", "聘币地并屁", "聘币屁地并", "聘币屁并地", "聘币并地屁", "聘币并屁地",
        "聘屁地币并", "聘屁地并币", "聘屁币地并", "聘屁币并地", "聘屁并地币", "聘屁并币地", "聘并地币屁", "聘并地屁币", "聘并币地屁", "聘并币屁地", "聘并屁地币", "聘并屁币地",
        "地聘币屁并", "地聘币并屁", "地聘屁币并", "地聘屁并币", "地聘并币屁", "地聘并屁币", "地币聘屁并", "地币聘并屁", "地币屁聘并", "地币屁并聘", "地币并聘屁", "地币并屁聘",
        "地屁聘币并", "地屁聘并币", "地屁币聘并", "地屁币并聘", "地屁并聘币", "地屁并币聘", "地并聘币屁", "地并聘屁币", "地并币聘屁", "地并币屁聘", "地并屁聘币", "地并屁币聘",
        "币聘地屁并", "币聘地并屁", "币聘屁地并", "币聘屁并地", "币聘并地屁", "币聘并屁地", "币地聘屁并", "币地聘并屁", "币地屁聘并", "币地屁并聘", "币地并聘屁", "币地并屁聘",
        "币屁聘地并", "币屁聘并地", "币屁地聘并", "币屁地并聘", "币屁并聘地", "币屁并地聘", "币并聘地屁", "币并聘屁地", "币并地聘屁", "币并地屁聘", "币并屁聘地", "币并屁地聘",
        "屁聘地币并", "屁聘地并币", "屁聘币地并", "屁聘币并地", "屁聘并地币", "屁聘并币地", "屁地聘币并", "屁地聘并币", "屁地币聘并", "屁地币并聘", "屁地并聘币", "屁地并币聘",
        "屁币聘地并", "屁币聘并地", "屁币地聘并", "屁币地并聘", "屁币并聘地", "屁币并地聘", "屁并聘地币", "屁并聘币地", "屁并地聘币", "屁并地币聘", "屁并币聘地", "屁并币地聘",
        "并聘地币屁", "并聘地屁币", "并聘币地屁", "并聘币屁地", "并聘屁地币", "并聘屁币地", "并地聘币屁", "并地聘屁币", "并地币聘屁", "并地币屁聘", "并地屁聘币", "并地屁币聘",
        "并币聘地屁", "并币聘屁地", "并币地聘屁", "并币地屁聘", "并币屁聘地", "并币屁地聘", "并屁聘地币", "并屁聘币地", "并屁地聘币", "并屁地币聘", "并屁币聘地", "并屁币地聘"]
LPet = ["狗猫马鸟鱼", "狗猫马鱼鸟", "狗猫鸟马鱼", "狗猫鸟鱼马", "狗猫鱼马鸟", "狗猫鱼鸟马", "狗马猫鸟鱼", "狗马猫鱼鸟", "狗马鸟猫鱼", "狗马鸟鱼猫", "狗马鱼猫鸟", "狗马鱼鸟猫",
        "狗鸟猫马鱼", "狗鸟猫鱼马", "狗鸟马猫鱼", "狗鸟马鱼猫", "狗鸟鱼猫马", "狗鸟鱼马猫", "狗鱼猫马鸟", "狗鱼猫鸟马", "狗鱼马猫鸟", "狗鱼马鸟猫", "狗鱼鸟猫马", "狗鱼鸟马猫",
        "猫狗马鸟鱼", "猫狗马鱼鸟", "猫狗鸟马鱼", "猫狗鸟鱼马", "猫狗鱼马鸟", "猫狗鱼鸟马", "猫马狗鸟鱼", "猫马狗鱼鸟", "猫马鸟狗鱼", "猫马鸟鱼狗", "猫马鱼狗鸟", "猫马鱼鸟狗",
        "猫鸟狗马鱼", "猫鸟狗鱼马", "猫鸟马狗鱼", "猫鸟马鱼狗", "猫鸟鱼狗马", "猫鸟鱼马狗", "猫鱼狗马鸟", "猫鱼狗鸟马", "猫鱼马狗鸟", "猫鱼马鸟狗", "猫鱼鸟狗马", "猫鱼鸟马狗",
        "马狗猫鸟鱼", "马狗猫鱼鸟", "马狗鸟猫鱼", "马狗鸟鱼猫", "马狗鱼猫鸟", "马狗鱼鸟猫", "马猫狗鸟鱼", "马猫狗鱼鸟", "马猫鸟狗鱼", "马猫鸟鱼狗", "马猫鱼狗鸟", "马猫鱼鸟狗",
        "马鸟狗猫鱼", "马鸟狗鱼猫", "马鸟猫狗鱼", "马鸟猫鱼狗", "马鸟鱼狗猫", "马鸟鱼猫狗", "马鱼狗猫鸟", "马鱼狗鸟猫", "马鱼猫狗鸟", "马鱼猫鸟狗", "马鱼鸟狗猫", "马鱼鸟猫狗",
        "鸟狗猫马鱼", "鸟狗猫鱼马", "鸟狗马猫鱼", "鸟狗马鱼猫", "鸟狗鱼猫马", "鸟狗鱼马猫", "鸟猫狗马鱼", "鸟猫狗鱼马", "鸟猫马狗鱼", "鸟猫马鱼狗", "鸟猫鱼狗马", "鸟猫鱼马狗",
        "鸟马狗猫鱼", "鸟马狗鱼猫", "鸟马猫狗鱼", "鸟马猫鱼狗", "鸟马鱼狗猫", "鸟马鱼猫狗", "鸟鱼狗猫马", "鸟鱼狗马猫", "鸟鱼猫狗马", "鸟鱼猫马狗", "鸟鱼马狗猫", "鸟鱼马猫狗",
        "鱼狗猫马鸟", "鱼狗猫鸟马", "鱼狗马猫鸟", "鱼狗马鸟猫", "鱼狗鸟猫马", "鱼狗鸟马猫", "鱼猫狗马鸟", "鱼猫狗鸟马", "鱼猫马狗鸟", "鱼猫马鸟狗", "鱼猫鸟狗马", "鱼猫鸟马狗",
        "鱼马狗猫鸟", "鱼马狗鸟猫", "鱼马猫狗鸟", "鱼马猫鸟狗", "鱼马鸟狗猫", "鱼马鸟猫狗", "鱼鸟狗猫马", "鱼鸟狗马猫", "鱼鸟猫狗马", "鱼鸟猫马狗", "鱼鸟马狗猫", "鱼鸟马猫狗"]

startTime = time.time()
times = 0


def check(hom, cou, dri, cig, pet):
    if hom[cou.find("英")] != "红":
        return False
    if pet[cou.find("瑞")] != "狗":
        return False
    if hom.find("绿") >= hom.find("白"):
        return False
    if dri[cou.find("丹")] != "茶":
        return False
    if dri[hom.find("绿")] != "咖":
        return False
    if pet[cig.find("聘")] != "鸟":
        return False
    if cig[hom.find("黄")] != "地":
        return False
    if dri.find("奶") != 2:
        return False
    if cou.find("挪") != 0:
        return False
    # B牌香烟的人住在养猫人的隔壁
    if abs(cig.find("币") - pet.find("猫")) != 1:
        return False
    # 养马人的人住在D牌香烟的隔壁
    if abs(pet.find("马") - cig.find("地")) != 1:
        return False
    if dri[cig.find("并")] != "酒":
        return False
    if cig[cou.find("德")] != "屁":
        return False
    # 挪威人住蓝色房子隔壁
    if abs(cou.find("挪") - hom.find("蓝")) != 1:
        return False
    # 抽B牌香烟的邻居喝水
    if abs(cig.find("币") - dri.find("水")) != 1:
        return False
    return True


def cal():
    global startTime
    global times
    for hom in LHom:
        if hom[1] != "蓝":  # 放在这里减少尝试次数
            continue
        if hom.find("绿") > hom.find("白"):  # 放在这里减少尝试次数
            continue
        for cou in LCou:
            if cou[0] != "挪":  # 放在这里减少尝试次数
                continue
            for dri in LDri:
                if dri[2] != "奶":  # 放在这里减少尝试次数
                    continue
                for cig in LCig:
                    for pet in LPet:
                        if check(hom, cou, dri, cig, pet):
                            print('第', time.time() - startTime, '秒 第', times, '次枚举时得到答案：\n hom=', hom, ' cou=', cou,
                                  ' dri=', dri, ' cig=', cig, ' pet=', pet, '\n养鱼的是', hom[pet.find("鱼")], '色房子的',
                                  cou[pet.find("鱼")], '国人，爱喝', dri[pet.find("鱼")], '，抽', cig[pet.find("鱼")], '牌子的烟\n')
                        times += 1
    print('已解决 共耗时', time.time() - startTime, '秒 枚举次数为', times)


if __name__ == "__main__":
    cal()
